package api

import (
	"firstdemo_go/cache"
	"firstdemo_go/model"
	"firstdemo_go/model/request"
	"firstdemo_go/model/response"
	"firstdemo_go/service"
	"github.com/gin-gonic/gin"
)

/*
	用go语言编写一个服务，接受http请求，这个服务提供如下http接口，所有接口均为post请求，接受和返回的数据都是json格式，
	所有接口请求成功返回{"ret":1, "data":xxx}，其中data有可能为空；
	失败返回{"ret":-1, "msg":"xxx"}
*/

func AddData(c *gin.Context) {
	// 添加接口，请求数据格式为{"key":"xxx", "value":"xxx"}
	var data model.Data
	_ = c.ShouldBind(&data)
	if err := service.AddData(data); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func DelData(c *gin.Context) {
	// 删除接口，请求数据格式为{"keys":["xxx",...]}
	var data request.DelRequest
	_ = c.ShouldBind(&data)
	if err := service.DelData(data); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func ModData(c *gin.Context) {
	// 修改接口，请求数据格式为{"key":"xxx", "value":"xxx"}
	var data model.Data
	_ = c.ShouldBind(&data)
	cache.ModData(data)
	if err := service.ModData(data); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func QueryData(c *gin.Context) {
	// 查询接口，请求数据格式为{"keys":["xxx",...]}，返回的结果data里面表示所有查询到的key，
	//"data":{"key1":"value1", "key2":"value2"}
	var data request.QueryRequest
	_ = c.ShouldBind(&data)
	if res, err := cache.QueryData(data); err != nil {
		response.FailWithMessage(err.Error(), c)
	} else {
		response.OkWithData(res, c)
	}
}
